#include "IdentificadorProcFunc.h"

int IdentificadorProcFunc::getN()
{
    return this->n;
}

void IdentificadorProcFunc::setN(int m)
{
    this->n = m;
}

int IdentificadorProcFunc::getDeslocamento()
{
    return this->deslocamento;
}

void IdentificadorProcFunc::setDeslocamento(int pDesloc)
{
    this->deslocamento = pDesloc;
}

std::string IdentificadorProcFunc::getRetorno()
{
    return this->retorno;
}

void IdentificadorProcFunc::setRetorno(std::string pRetorno)
{
    this->retorno = pRetorno;
}

void IdentificadorProcFunc::inserirParametro(IdentificadorParametro *id)
{
    this->parametros.push_back(id);
}

std::vector<IdentificadorParametro *> IdentificadorProcFunc::getParametros()
{
    return this->parametros;
}

void IdentificadorProcFunc::exibir(std::ostream& pSaida)
{
    pSaida << "Identificador: "     << getIdentificador();
    pSaida << " | Categoria: "      << (getCategoria() == 3 ? "function" : "procedure");
    pSaida << " | Nivel: "          << getNivel();
    pSaida << " | Procedimento: "   << getProcedimento();
    pSaida << " | Nro Parametros: " << getN();
    if (getCategoria() == 3)
    {
        pSaida << " | Deslocamento: "   << getDeslocamento();
        pSaida << " | Retorno: "   << getRetorno();
    }
    pSaida << std::endl;
}

IdentificadorProcFunc::IdentificadorProcFunc(std::string pIdentificador, int pCategoria, int pNivel, std::string pProc, int pN, int pDeslocamento, std::string pRetorno)
                                             : Identificador(pIdentificador, pCategoria, pNivel, pProc)
{
    this->retorno      = pRetorno;
    this->n            = pN;
    this->deslocamento = pDeslocamento;
}
